
package uniriotec.pm.empresa.control;

import java.io.IOException;
import java.sql.Date;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import uniriotec.pm.empresa.api.EmpregadoService;

import uniriotec.pm.empresa.model.Empregado;

import uniriotec.pm.empresa.util.ServiceUtil;
import uniriotec.pm.empresa.util.Validador;

/**
 * Servlet implementation class EmpregadoServlete
 */
public class EmpregadoServlet extends HttpServlet {
  

	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public EmpregadoServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
    @Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          doPost(request,response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
    @Override
	protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException     {
         String msgErroDeEntrada = "";
         
                String comando = request.getParameter("comando");
                
		if (comando == null) 
                   response.sendRedirect("listar.jsp");
                        
                else if (comando.equals("inserir"))
                {
                 msgErroDeEntrada = validaEntrada(request);
                 if (msgErroDeEntrada.isEmpty())
                      inserir(request, response);
                 else{
                    response.sendRedirect("pages/empregado/inserir.jsp?mensagem= "+ msgErroDeEntrada);
                    }
                 }
                        
                else if (comando.equals("busca4remover"))
                    buscarRemover(request, response);
                        
	        else if (comando.equals("remover"))
                   remover(request, response);  
                        
                else if (comando.equals("listar"))
                   listar(request, response);
                    
                else if (comando.equals("buscar")) 
                    buscar(request, response);
                        
                else if (comando.equals("busca4alterar"))
                    buscarAlterar(request, response);
                        
                else if (comando.equals("alterar"))
                {
                 msgErroDeEntrada = validaEntrada(request);
                 if (msgErroDeEntrada.isEmpty())
                      alterar(request, response);
                 else
                  {
                    response.sendRedirect("pages/empregado/alterar.jsp?mensagem= "+ msgErroDeEntrada);
	           }
                 }
                
                }
        
         private void inserir (HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{
                    EmpregadoService service = ServiceUtil.getServiceFactory().getEmpregadoService();
			String nome = request.getParameter("nome");
                        String cpf  = request.getParameter("cpf");
			String sexo = request.getParameter("sexo");
                        double salario  = Double.parseDouble(request.getParameter("salario"));
                        Date dataNascimento = null;
                        Date dataAdmissao = null;
                        Date dataDesligamento = null;
                        try {
                             dataNascimento = Validador.formataData(request.getParameter("data_nascimento"));
                             dataAdmissao = Validador.formataData(request.getParameter("data_admissao"));
                             dataDesligamento  = Validador.formataData(request.getParameter("data_desligamento"));
	                    } catch (Exception ex) {
                               request.setAttribute("mensagem", "Erro na conversão da data erro: "+ex);
                               RequestDispatcher rd = request.getRequestDispatcher("pages/empregado/inserir.jsp");
                               rd.forward(request, response);
                             }	
                        
			
     
			
				 
				try {
                                    Empregado empregado;
                                    empregado = new Empregado(cpf,nome,sexo,dataNascimento,dataAdmissao,salario,dataDesligamento);
				     service.create(empregado);
                                     ArrayList<Empregado> listaEmpregado = service.listAll();
			             request.setAttribute("lista_empregados",listaEmpregado );
                	             String mensagem = "Empregado Inserida com Sucesso!";
				     request.setAttribute("mensagem", mensagem);
                                    RequestDispatcher rd = request.getRequestDispatcher("pages/empregado/listar.jsp");
				     
                                     rd.forward(request, response);
				}  catch (Exception e) {
					response.sendRedirect("pages/empregado/error.jsp?tituloPagina=Inserir Empregado&mensagem=erro na inserção! Detalhe: "
									+ e);
				}
			}

		
        
        private void remover(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{
            EmpregadoService service = ServiceUtil.getServiceFactory().getEmpregadoService();
                        try {
			     
                             service.remove(request.getParameter("cpf"));
                             response.sendRedirect("/empresa/EmpregadoServlet?comando=listar");
			     }
                            catch (Exception e) {
			    response.sendRedirect("pages/empregado/error.jsp?tituloPagina=Remover Disciplina&mensagem=erro na remo��o! Detalhe: "
										+ e);
			}
				
			 

        }
        private void listar(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{
                        
                    EmpregadoService service = ServiceUtil.getServiceFactory().getEmpregadoService();
                    try {
                  
		        
                        ArrayList<Empregado> listaEmpregado =  service.listAll();
			request.setAttribute("lista_empregados",listaEmpregado );
                	 RequestDispatcher rd = request.getRequestDispatcher("pages/empregado/listar.jsp");
			 rd.forward(request, response);
			} catch (Exception e) {
			  response.sendRedirect("pages/empregado/error.jsp?tituloPagina=Listagem de Empregados! Detalhe: "+ e);
			}

        }
      
     
        private void buscarAlterar (HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{
            
                    EmpregadoService service = ServiceUtil.getServiceFactory().getEmpregadoService();			
			String cpfParam = request.getParameter("cpf");

			if ("".equals(cpfParam)) {
				response.sendRedirect("pages/empregado/error.jsp?tituloPagina=Alterar Empregado&mensagem=cpf n�o preenchido!");
			} else {
			try {
			  Empregado empregado = service.searchByCpf(cpfParam);
			 if (empregado == null) {
			   response.sendRedirect("pages/empregado/error.jsp?tituloPagina=Alterar Empregado&mensagem=N�o foi poss�vel encontrar o empregado!");
					} else {
						request.setAttribute("empregado", empregado);

						RequestDispatcher rd = request
								.getRequestDispatcher("pages/empregado/alterar.jsp");
						rd.forward(request, response);
					}

				} catch (NumberFormatException e) {
					response
							.sendRedirect("pages/empregado/error.jsp?tituloPagina=Alterar Empregado&mensagem=Entrada inv�lida!");
                                } catch (Exception e) {
					response
							.sendRedirect("pages/empregado/error.jsp?tituloPagina=Alterar Empregado&mensagem=erro na busca! Detalhe: "
									+ e);
				}
			}
        }
      
        
        private void buscarRemover(HttpServletRequest request,
			HttpServletResponse response)throws ServletException, IOException{
            
                        EmpregadoService service = ServiceUtil.getServiceFactory().getEmpregadoService();			String idParam = request.getParameter("id");
                        String cpfParam = request.getParameter("cpf");
			if ("".equals(cpfParam)) {
				response.sendRedirect("pages/empregado/error.jsp?tituloPagina=Alterar Empregado&mensagem=cpf não preenchido!");
			} else {
			try {
			  Empregado empregado = service.searchByCpf(cpfParam);
			 if (empregado == null) {
			   response.sendRedirect("pages/empregado/error.jsp?tituloPagina=Alterar Empregado&mensagem=N�o foi poss�vel encontrar empregado!");
					} else {
						request.setAttribute("empregado", empregado);

						RequestDispatcher rd = request
								.getRequestDispatcher("pages/empregado/remover.jsp");
						rd.forward(request, response);
					}

				} catch (NumberFormatException e) {
					response
							.sendRedirect("pages/empregado/error.jsp?tituloPagina=Alterar Empregado&mensagem=Entrada inv�lida!");
                                } catch (Exception e) {
					response
							.sendRedirect("pages/empregado/error.jsp?tituloPagina=Alterar Empregado&mensagem=erro na busca! Detalhe: "
									+ e);
				}
			}
        }
        
        private void alterar(HttpServletRequest request,
			HttpServletResponse response)throws ServletException, IOException{
            

                    EmpregadoService service = ServiceUtil.getServiceFactory().getEmpregadoService();
			String nome = request.getParameter("nome");
                        String cpf  = request.getParameter("cpf");
			String sexo = request.getParameter("sexo");
                        double salario  = Double.parseDouble(request.getParameter("salario"));
                       Date dataNascimento = null;
                        Date dataAdmissao = null;
                        Date dataDesligamento = null;
                        try {
                             dataNascimento = Validador.formataData(request.getParameter("data_nascimento"));
                             dataAdmissao = Validador.formataData(request.getParameter("data_admissao"));
                             dataDesligamento  = Validador.formataData(request.getParameter("data_desligamento"));
	                    } catch (Exception ex) {
                               request.setAttribute("mensagem", "Erro na conversão da data erro: "+ex);
                               RequestDispatcher rd = request.getRequestDispatcher("pages/empregado/inserir.jsp");
                               rd.forward(request, response);
                             }
			
                        try {
                             Empregado empregado;
                             empregado = new Empregado(cpf,nome,sexo,dataNascimento,dataAdmissao,salario,dataDesligamento);
			     service.update(empregado);
                             ArrayList<Empregado> listaEmpregado = service.listAll();
			     request.setAttribute("lista_empregados",listaEmpregado );
                	     String mensagem = "Empregado Alterado com Sucesso!";
			     request.setAttribute("mensagem", mensagem);
                             RequestDispatcher rd = request.getRequestDispatcher("pages/empregado/listar.jsp");
                             rd.forward(request, response);
				}  catch (Exception e) {
					response.sendRedirect("pages/empregado/error.jsp?tituloPagina=Alterar Empregado&mensagem=erro na alteração! Detalhe: "
									+ e);
				}
			}

	

        
     private void buscar(HttpServletRequest request,	HttpServletResponse response)throws ServletException, IOException{
            EmpregadoService service = ServiceUtil.getServiceFactory().getEmpregadoService();	
            
                 String idParam = request.getParameter("cpf");
                 if ("".equals(idParam)) {
		  response.sendRedirect("pages/empregado/error.jsp?tituloPagina=Buscar Disciplina&mensagem=Id n�o preenchido!");
			} else {
			

				try {
					Empregado empregado= service.searchByCpf(idParam);
					if (empregado == null) {
						response.sendRedirect("pages/empregado/error.jsp?tituloPagina=Buscar Empregado&mensagem=N�o foi poss�vel encontrar empregado!");
					} else {
                                            ArrayList<Empregado> listaEmpregado = new ArrayList<Empregado>();
                                            listaEmpregado.add(empregado);
			                    request.setAttribute("lista_empregados", listaEmpregado);
                	                    RequestDispatcher rd = request.getRequestDispatcher("pages/empregado/listar.jsp");
				            rd.forward(request, response);
					}

				} catch (NumberFormatException e) {
					response
							.sendRedirect("pages/empregado/error.jsp?tituloPagina=Buscar Empregado&mensagem=Entrada inv�lida!");
				} catch (Exception e) {
					response
							.sendRedirect("pages/empregado/error.jsp?tituloPagina=Buscar Empregado&mensagem=erro na busca! Detalhe: "
									+ e);
				}
			
                 }
        
        }

    private String validaEntrada(HttpServletRequest request) {
        String msgErro ="";
        String cpf  = request.getParameter("cpf");
        if (cpf.isEmpty())
           msgErro ="<br> <h4 >- CPF não preenchido !</h4> ";     
        
        return msgErro;
    }
        
}
